package com._5704.website.service;

import com._5704.website.entity.Project;
import com._5704.website.entity.User;
import com._5704.website.form.ProjectForm;
import com._5704.website.vo.projectVO.ProjectAndMembersVO;
import com._5704.website.vo.projectVO.ProjectVO;
import com._5704.website.vo.userVO.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Yiyoung
 * @since 2021-07-25
 */
public interface IProjectService extends IService<Project> {
    /**
     * 创建项目
     * @param projectForm 项目表单
     * @param userId 用户id
     * @return
     */
    int createProject(ProjectForm projectForm, String userId);

    /**
     * 获得多个项目
     * @param page 页数
     * @param num 数量
     * @return 项目list
     */
    List<Project> getProjects(int page, int num);

    /**
     * 获得项目
     * @param id 项目id
     * @return 项目
     */
    Project getProject(Integer id);

    /**
     * 获得VO
     * @param projectVO 项目
     * @param userVOList 成员list
     * @return VO
     */
    ProjectAndMembersVO getProjectAndMembersVO(ProjectVO projectVO, List<UserVO> userVOList);

    /**
     * 获得参加项目的用户
     * @param id 项目id
     * @return 用户list
     */
    List<User> getMembers(Integer id);

    /**
     * 获得VO
     * @param project 项目
     * @param Leader
     * @return VO
     */
    ProjectVO getProjectVO(Project project, UserVO Leader);

    /**
     * 设置成员
     * @param userId 用户id
     * @param id 项目id
     */
    void setMember(String userId, int id);

    /**
     * 检查成员是否满了
     * @param id 项目id
     * @return
     */
    boolean isMemberFull(Integer id);

    /**
     * 检查用户是否为项目创造者
     * @param id 项目id
     * @param userId 用户id
     * @return
     */
    boolean isCreator(Integer id, String userId);

    /**
     * 取消成员
     * @param userId 用户id
     * @param id 项目id
     */
    void cancelMember(String userId, Integer id);

    /**
     * 是否为团队成员
     * @param userId 用户id
     * @param id 项目id
     * @return
     */
    boolean isMember(String userId, Integer id);

    /**
     * 删除
     * @param id 项目id
     */
    void delete(Project id);

    /**
     * 设置更新
     * @param project     项目
     * @param projectForm 项目表单
     */
    void setModifyData(Project project, ProjectForm projectForm);

    /**
     * 更新
     * @param project 项目
     */
    void updateProject(Project project);

    /**
     *  获得项目总数
     * @return
     */
    int getNum();

    /**
     * 获得自己的项目
     * @param userId 用户id
     * @param page
     * @param num
     * @return
     */
    List<Project> getMyProject(String userId, int page, int num);

    /**
     * 获得参加的项目
     * @param userId 用户id
     * @param page
     * @param num
     * @return
     */
    List<Project> getPartProject(String userId, int page, int num);

    /**
     * 根据名字获得项目
     * @param projectName 名字
     * @param page
     * @param num
     * @return
     */
    List<Project> getProjectByName(String projectName, int page, int num);

    /**
     * 获得数量
     * @param userId
     * @return
     */
    int getMineNum(String userId);

    /**
     * 获得数量
     * @param userId
     * @return
     */
    int getPartNum(String userId);

    /**
     * 获得数量
     * @param isSearch
     * @return
     */
    int getNum(String isSearch);

    /**
     * 更新图片
     *  @param file 文件
     * @param id   活动id
     */
    void uploadPic(MultipartFile file, Integer id);
}
